package com.yihu.wlyy.web.common.qrcode;

import com.yihu.wlyy.entity.doctor.Doctor;
import com.yihu.wlyy.service.common.QrcodeService;
import com.yihu.wlyy.service.common.account.DoctorService;
import com.yihu.wlyy.web.WeixinBaseController;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * Created by lyr on 2016/08/10.
 */
@Controller
@RequestMapping(value = "/qrcode")
public class QrcodeController extends WeixinBaseController {

    @Autowired
    private QrcodeService qrcodeService;
    @Autowired
    private DoctorService doctorService;

    @RequestMapping(value = "/doctors")
    @ResponseBody
    public String makeDoctorQrcodes(String hospital){
        try{
            if(qrcodeService.makeDoctorQrCode(hospital,getAccessToken())){
                return write(200,"生成二维码成功!");
            }else{
                return error(-1,"生成二维码失败!");
            }
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"生成二维码失败!");
        }
    }

    /**
     * 生成某个医生的二维码
     *
     * @param doctor
     * @return
     */
    @RequestMapping(value = "/doctor")
    @ResponseBody
    public String makeDoctorQrcode(String doctor){
        try{
            if(qrcodeService.makeDoctorQrcode(doctor,getAccessToken())){
                return write(200,"生成二维码成功!");
            }else{
                return error(-1,"生成二维码失败!");
            }
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"生成二维码失败!");
        }
    }

    /**
     * 生成社区二维码
     *
     * @param hospital
     * @return
     */
    @RequestMapping(value = "/hospital")
    @ResponseBody
    public String makeHospitalQrcode(String hospital){
        try{
            if(qrcodeService.makeHospitalQrcode(hospital,getAccessToken())){
                return write(200,"生成二维码成功!");
            }else{
                return error(-1,"生成二维码失败!");
            }
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"生成二维码失败!");
        }
    }

    /**
     * 下载某个社区的二维码
     *
     * @param hospital
     * @param response
     */
    @RequestMapping(value = "/hospital_img")
    public void downloadSqQrcode(String hospital, HttpServletResponse response){
        try{
            File file = new File(QrcodeController.class.getResource("/").getPath().replace("/WEB-INF/classes/", "") +
                    File.separator +"qrcode" + File.separator + hospital + ".png");
            boolean flag = false;
            if(!file.exists()){
                flag = qrcodeService.makeHospitalQrcode(hospital,getAccessToken());
            }else{
                flag = true;
            }

            if(flag = true) {
                response.setCharacterEncoding("utf-8");

                String path = request.getSession().getServletContext().getRealPath("/")
                        + File.separator + "qrcode" + File.separator + hospital + ".png";
                InputStream inputStream = new FileInputStream(path);
                OutputStream outputStream = response.getOutputStream();
                byte[] b = new byte[2048];
                int length = 0;

                while ((length = inputStream.read(b)) > 0) {
                    outputStream.write(b, 0, length);
                }

                outputStream.close();
                inputStream.close();
            }else{
                response.setStatus(404);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }


    /**
     * 下载某个医生的二维码
     *
     * @param doctor
     * @param response
     */
    @RequestMapping(value = "/download")
    public void downloadQrcode(String doctor, HttpServletResponse response){
        try{
            Doctor doc = doctorService.findDoctorByCode(doctor);

            if(doc != null){
                if(StringUtils.isEmpty(doc.getQrcode())){
                    qrcodeService.makeDoctorQrcode(doctor,getAccessToken());
                    doc = doctorService.findDoctorByCode(doctor);
                }else{
                    File file = new File(QrcodeController.class.getResource("/").getPath().replace("/WEB-INF/classes/", "") +
                    File.separator +"qrcode" + File.separator + doc.getQrcode());

                    if(!file.exists()){
                        qrcodeService.makeDoctorQrcode(doctor,getAccessToken());
                        doc = doctorService.findDoctorByCode(doctor);
                    }
                }

                response.setCharacterEncoding("utf-8");
                response.setContentType("multipart/form-data");
                response.setHeader("Content-Disposition", "attachment;fileName="
                        + doc.getQrcode());

                String path = request.getSession().getServletContext().getRealPath("/")
                        + File.separator + "qrcode" + File.separator + doc.getQrcode();
                InputStream inputStream = new FileInputStream(path);
                OutputStream outputStream = response.getOutputStream();
                byte[] b = new byte[2048];
                int length = 0;

                while ((length = inputStream.read(b)) > 0) {
                    outputStream.write(b, 0, length);
                }

                outputStream.close();
                inputStream.close();
            }else{
                throw new Exception("医生信息不存在!");
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 下载某个医生的二维码
     *
     * @param doctor
     * @param response
     */
    @RequestMapping(value = "/doctor_img")
    public void downloadQrcodeImage(String doctor, HttpServletResponse response){
        try{
            System.out.println("------------------doctor："+doctor);
            Doctor doc = doctorService.findDoctorByCode(doctor);

            if(doc != null){
                if(StringUtils.isEmpty(doc.getQrcode())){
                    qrcodeService.makeDoctorQrcode(doctor,getAccessToken());
                    doc = doctorService.findDoctorByCode(doctor);
                }else{
                    File file = new File(QrcodeController.class.getResource("/").getPath().replace("/WEB-INF/classes/", "") +
                            File.separator +"qrcode" + File.separator + doc.getQrcode());

                    if(!file.exists()){
                        qrcodeService.makeDoctorQrcode(doctor,getAccessToken());
                        doc = doctorService.findDoctorByCode(doctor);
                    }
                }
                String path = request.getSession().getServletContext().getRealPath("/")
                        + File.separator + "qrcode" + File.separator + doc.getQrcode();
                InputStream inputStream = new FileInputStream(path);
                OutputStream outputStream = response.getOutputStream();
                byte[] b = new byte[2048];
                int length = 0;

                while ((length = inputStream.read(b)) > 0) {
                    outputStream.write(b, 0, length);
                }

                outputStream.close();
                inputStream.close();
            }else{
                throw new Exception("医生信息不存在!");
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 下载所有医生的二维码图片
     *
     * @param hospital
     * @param response
     */
    @RequestMapping(value = "/download/doctors")
    public void downloadQrcodes(String hospital,HttpServletResponse response){
        try{
            File file = qrcodeService.downloadDoctorQrCodes(hospital,getAccessToken());

            if(file != null){
                response.setCharacterEncoding("utf-8");
                response.setContentType("multipart/form-data");
                response.setHeader("Content-Disposition", "attachment;fileName=doctors_qrcode.zip");

                InputStream inputStream = new FileInputStream(file);
                OutputStream outputStream = response.getOutputStream();
                byte[] b = new byte[2048];
                int length = 0;

                while ((length = inputStream.read(b)) > 0) {
                    outputStream.write(b, 0, length);
                }

                outputStream.close();
                inputStream.close();
            }else{
                response.setStatus(500);
            }
        }catch (Exception e){
            e.printStackTrace();
            response.setStatus(500);
        }
    }

    /**
     * 下载某个区的社区的二维码图片
     *
     * @param area
     * @param response
     */
    @RequestMapping(value = "/download/hospitals")
    public void downloadSqQrcodes(String area,HttpServletResponse response){
        try{
            File file = qrcodeService.downloadHospitalQrCodes(area,getAccessToken());

            if(file != null){
                response.setCharacterEncoding("utf-8");
                response.setContentType("multipart/form-data");
                response.setHeader("Content-Disposition", "attachment;fileName=hospitals_qrcode.zip");

                InputStream inputStream = new FileInputStream(file);
                OutputStream outputStream = response.getOutputStream();
                byte[] b = new byte[2048];
                int length = 0;

                while ((length = inputStream.read(b)) > 0) {
                    outputStream.write(b, 0, length);
                }

                outputStream.close();
                inputStream.close();
            }else{
                response.setStatus(500);
            }
        }catch (Exception e){
            e.printStackTrace();
            response.setStatus(500);
        }
    }

}
